package ar.com.jsejtman.common.security.schema.dao;

import ar.com.jsejtman.common.persistence.dao.GenericDao;
import ar.com.jsejtman.common.persistence.exception.DaoException;
import ar.com.jsejtman.common.security.schema.entity.SecurityUser;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;

/**
 * DAO correspondiente a la entidad de datos SecurityUser. Permite realizar operaciones generales de
 * lectura y escritura, así como operaciones específicas de esta entidad de datos.
 * 
 * @author jsejtman
 */
public class SecurityUserDao extends GenericDao<SecurityUser, Long> {

	/**
	 * Obtiene un usuario de seguridad a partir de su nombre de usuario.
	 * 
	 * @param username Nombre de usuario de seguridad.
	 * @return Usuario de seguridad obtenido.
	 * @throws DaoException En caso de problemas al obtener la entidad solicitada.
	 */
	public final SecurityUser getSecurityUserByUsername(final String username) throws DaoException {

		if (username == null) {
			throw new IllegalArgumentException("El parámetro username es requerido.");
		}

		try {
			final Criteria baseCriteria = this.getSession().createCriteria(SecurityUser.class);
			baseCriteria.add(Restrictions.eq("username", username));

			return ((SecurityUser) baseCriteria.uniqueResult());

		} catch (final HibernateException e) {
			throw new DaoException(e);
		}
	}
}
